// 使用字符函数统计字符串中各类型字符的个数
// 键盘录入一句话，统计这句话中字母字符、数字字符、空白、标点符号和其它字符的个数。
/*
输入: sdfgiiksoi2387959237 /../ ,. /, .  
字母字符10
数字字符10
空白6
标点6
其他3
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void my_string_count(char *str);

int main(int argc, char **argv)
{
    char *str = NULL;

    // 申请字符串存储空间
    str = (char *)malloc(100 * sizeof(char));
    if (str == NULL)
    {
        perror("malloc");
        return 1;
    }

    // 获取字符串
    printf("输入: ");
    fgets(str, 100 * sizeof(char), stdin);
    str[strlen(str) - 1] = '\0';


    // 计算
    my_string_count(str);

    // 释放空间
    if (str != NULL)
    {
        free(str);
    }
    
    return 0;
}

void my_string_count(char *str)
{
    int i = 0;
    int letter = 0;
    int num = 0;
    int blank = 0;
    int punctuation = 0;
    int other = 0;

    while (str[i] != '\0')
    {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
        {
            letter++;
        }
        else if (str[i] >= '0' && str[i] <= '9')
        {
            num++;
        }
        else if (str[i] == ' ')
        {
            blank++;
        }
        else if (str[i] == ',' || str[i] == '.' || str[i] == '?')
        {
            punctuation++;
        }
        else
        {
            other++;
        }
        i++;
    }

    printf("字母字符%d\n", letter);
    printf("数字字符%d\n", num);
    printf("空白%d\n", blank);
    printf("标点%d\n", punctuation);
    printf("其他%d\n", other);

    return;
}